package com.sinochem.sales.service.service.impl;


import com.sinochem.sales.common.api.vo.MessageTemplateVO;
import com.sinochem.sales.service.service.IMessageTemplateService;
import org.apache.log4j.Logger;
import org.sagacity.sqltoy.dao.SqlToyLazyDao;
import org.sagacity.sqltoy.exception.BaseException;
import org.sagacity.sqltoy.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.Map.Entry;

/**
 * @author xuan  <a href="zhangshixuanj@163.com">联系作者</a>
 * @version Revision:v1.0,Date: 2018/1/11 18:35
 * @project sinochem-parent
 * @description
 * @Modification Date: 2018/1/11 18:35  {填写修改说明}
 */
@Service
public class MessageTemplateServiceImpl implements IMessageTemplateService {

    /**
     * 日志
     */
    private final static Logger logger = Logger.getLogger(MessageTemplateServiceImpl.class);

    @Autowired
    private SqlToyLazyDao sqlToyLazyDao;

    /*
     * (non-Javadoc)
     * @see com.sinochem.common.api.service.IMessageTemplateService#findMessageTemplateByCode(java.lang.String, java.lang.String)
     */
    @Override
    public MessageTemplateVO findMessageTemplateByCode(String messageType, String messageCode) {
        try {
            return (MessageTemplateVO) sqlToyLazyDao.loadBySql("findMessageTemplateByCode", new String[]{"messageCode"},
                    new Object[]{messageCode}, MessageTemplateVO.class);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("MessageTemplateServiceImpl-->findMessageTemplateByCode-->查询操作失败!");
            throw new BaseException("查询操作失败!");
        }
    }

    /*
     * (non-Javadoc)
     * @see com.sinochem.common.service.IMessageTemplateService#findMessageTemplateCategoryByMessageAtrr(java.lang.String, java.lang.String)
     */
//	@SuppressWarnings("unchecked")
//	@Override
//	public List<MessageTemplateCategoryTO> findMessageTemplateCategoryByMessageAtrr(String messageAttr, String bizModule) {
//		try {
//			if(!"BIZ".equals(messageAttr)) {
//				String[] paramsNamed = new String[] {"enabled","messageAttr","bizModule"};
//				Object[] paramsValue = new Object[] {EnabledEnum.ENABLE.getCode(),messageAttr,bizModule};
//
//				List<MessageTemplateVO> templateList = sqlToyLazyDao.findBySql("findMessageTemplateCategoryByMessageAtrr", paramsNamed, paramsValue, MessageTemplateVO.class);
//				Map<String,String> msgResult = new HashMap<>();
//				for (MessageTemplateVO messageTemplateVO : templateList) {
//					msgResult.put(messageTemplateVO.getBizModuleCode(), messageTemplateVO.getBizModule());
//				}
//
//				List<MessageTemplateCategoryTO> categorys = new ArrayList<>();
//				for (Entry<String,String> entry : msgResult.entrySet()) {
//					MessageTemplateCategoryTO category = new MessageTemplateCategoryTO();
//					category.setLargeModule(entry.getKey());
//					category.setLargeModuleName(entry.getValue());
//					category.setMessageAttr(messageAttr);
//
//					List<MessageTemplateCategoryItemTO> categoryItemList = new ArrayList<>();
//					for (MessageTemplateVO messageTemplateVO : templateList) {
//						if(entry.getKey().equals(messageTemplateVO.getBizModuleCode())) {
//							MessageTemplateCategoryItemTO item = new MessageTemplateCategoryItemTO();
//							item.setSmallModule(messageTemplateVO.getTemplateCode());
//							item.setSmallModuleName(messageTemplateVO.getTemplateName());
//							categoryItemList.add(item);
//						}
//					}
//					category.setCategoryItemList(categoryItemList);
//					categorys.add(category);
//				}
//
//				return categorys;
//			} else {
//				List<MessageTemplateCategoryTO> categorys = new ArrayList<>();
//				// 代码时候的下拉
//				Map<String,String> largeModuleMap = BizApplyTypeEnum.getlargeModuleMapData();
//				for (Entry<String, String> entry : largeModuleMap.entrySet()) {
//					MessageTemplateCategoryTO categoryTO = new MessageTemplateCategoryTO();
//					categoryTO.setMessageAttr("BIZ");
//					categoryTO.setLargeModule(entry.getKey());
//					categoryTO.setLargeModuleName(entry.getValue());
//					List<MessageTemplateCategoryItemTO> categoryItemList = new ArrayList<>();
//					Map<String,String> smallModuleMap = BizApplyTypeEnum.getSmallModuleMapData(entry.getKey());
//					for (Entry<String, String> entrySmall : smallModuleMap.entrySet()) {
//						MessageTemplateCategoryItemTO item = new MessageTemplateCategoryItemTO();
//						item.setSmallModule(entrySmall.getKey());
//						item.setSmallModuleName(entrySmall.getValue());
//						categoryItemList.add(item);
//					}
//					categoryTO.setCategoryItemList(categoryItemList);
//
//					categorys.add(categoryTO);
//				}
//				return categorys;
//			}
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return null;
//	}

	/*
	 * (non-Javadoc)
	 * @see com.sinochem.common.service.IMessageTemplateService#messageTemplateContents(java.util.Map, java.lang.String)
	 */
	public String messageTemplateContents(Map<String,Object> paramMap,String templateCode){
		
		if(StringUtil.isNullOrBlank(templateCode)) {
    		return null;
    	}
    	
    	try {
	    	// 查询模版信息
	    	MessageTemplateVO templateVO = this.findMessageTemplateByCode(null, templateCode);
	    	
	    	String messageTemplateContents = templateVO.getTemplateContents();
	    	if(StringUtil.isNotNullAndBlank(paramMap)) {
	    		for (Entry<String, Object> entry : paramMap.entrySet()) {
	    			messageTemplateContents = messageTemplateContents.replace("${".concat(entry.getKey()).concat("}"), StringUtil.isNotNullAndBlank(entry.getValue())?entry.getValue().toString():"");
	    		}
	    	}
	    	return messageTemplateContents;
    	} catch (Exception e) {
    		logger.error("模版内容替换出错templateCode="+templateCode, e);
		}
    	return null;
	}
}
